package negocio;

import beans.UsuarioTo;

import dao.UsuarioDAO;

import java.util.ArrayList;

import utildb.Transaction;
import utildb.TransactionException;

public class UsuarioManager {
	
	public UsuarioManager() {
		super();
	}	

	public void registrarUsuario(UsuarioTo to) throws UsuarioManagerException {
		Transaction t = new Transaction();
		try {
			if(to.loginVacio())
			    throw new UsuarioManagerException("Login esta en blanco");
			else {
				UsuarioDAO user = new UsuarioDAO(t);
				user.create(to);
				t.commit();				
			}
		} catch (TransactionException e) {
			t.rollback();
			throw new UsuarioManagerException(e.getMessage());
		} finally {
			t.close();
		}
	}

	public void eliminarUsuario( String codUser) throws UsuarioManagerException {
		Transaction t = new Transaction();
		try {
			UsuarioDAO dao = new UsuarioDAO(t);
			dao.eliminar(codUser);
			t.commit();
		} catch (TransactionException e) {
			t.rollback();
			throw new UsuarioManagerException(e.getMessage());
		} finally {
			t.close();
		}
	}
	
	public UsuarioTo buscarUsuario( String codigo) 
	                 throws UsuarioManagerException {
		Transaction t = new Transaction();
		UsuarioTo usuario = null;
		try {
			if ((codigo == null) || codigo.length() == 0 || codigo.length() > 8) {
				throw new UsuarioManagerException("Código no valido");
			}
			UsuarioDAO dao = new UsuarioDAO(t);
			ArrayList all = dao.arrayUsuarios();

			usuario = dao.buscarUsuario( codigo);

			if (usuario == null ) {
				throw new UsuarioManagerException("Usuario no registrado");
			} 
		} catch (TransactionException e) {
			throw new UsuarioManagerException(e.getMessage());
		} finally {
			t.close();
		}
		return usuario;
	}

        
	public ArrayList getArrayUsuarios() throws UsuarioManagerException {
		Transaction t = new Transaction();
		try {
			UsuarioDAO dao = new UsuarioDAO(t);
			ArrayList all = dao.arrayUsuarios();
			t.close();
			return all;
		} catch (TransactionException e) {
			throw new UsuarioManagerException(e.getMessage());
		} finally {
			t.close();
		}
	}

      	public UsuarioTo validaUsuario( String codigo, String clave)
	                 throws UsuarioManagerException {
		Transaction t = new Transaction();
		UsuarioTo usuario = null;
		try {
			if ((codigo == null) || codigo.length() == 0 || codigo.length() > 8) {
				throw new UsuarioManagerException("Login no valido");
			}
			if ((clave == null) || clave.length() == 0 || clave.length() > 8) {
				throw new UsuarioManagerException("Clave no valido ");
			}
			UsuarioDAO dao = new UsuarioDAO(t);
			usuario = dao.buscarUsuario( codigo);

			if (usuario == null ) {
				throw new UsuarioManagerException("Usuario no registrado");
			} else {
				if (!usuario.isPassword( clave )) {
					throw new UsuarioManagerException("Clave es incorrecta");
				}
			}
		} catch (TransactionException e) {
			throw new UsuarioManagerException(e.getMessage());
		} finally {
			t.close();
		}
		return usuario;
	}

	public UsuarioTo buscarProveedor( String codigo)
	                 throws UsuarioManagerException {
		Transaction t = new Transaction();
		UsuarioTo usuario = null;
		try {
			if ((codigo == null) || codigo.length() == 0 ) {
				throw new UsuarioManagerException("Ruc no valido");
			}
			UsuarioDAO dao = new UsuarioDAO(t);
//			UsuarioTo usuario = dao.buscarProveedor(codigo);

			usuario = dao.buscarProveedor( codigo);

			if (usuario == null ) {
				throw new UsuarioManagerException("Proveedor no registrado");
			}
		} catch (TransactionException e) {
			throw new UsuarioManagerException(e.getMessage());
		} finally {
			t.close();
		}
		return usuario;
	}

}